import os
import re
import openpyxl
from openpyxl.styles import Font, Alignment
from urls import TEMPLATES
import urls

def judge_part(items, part):

    pattern = '|'.join(str(x) for x in items)
    if len(re.findall(pattern, part)) > 0:
        return True
    else:
        return False


class TonYICheck(object):
    
    
    def __init__(self, project_information, _new_path_) -> None:

        self.sheet = None
        self.project_information = project_information

        dir_path = TEMPLATES['隐蔽验收']['隐蔽验收']

        if len(project_information['检验批部位']) >= 12:
            self.Fontstyle = Font(size=10)
        if len(project_information['检验批部位']) < 12:
            self.Fontstyle = Font(size=8)
        self.DirWorkBooK = openpyxl.load_workbook(dir_path, data_only=True)

        self.FORM()

        self.DirWorkBooK.save(_new_path_)

        self.DirWorkBooK.close()
        
    def JudegeISNULL(self,key):
        if key in self.project_information:
            return self.project_information[key]
        else:
            return ''
    
    def FORM(self):

        DIR_SHEET = self.DirWorkBooK[self.DirWorkBooK.sheetnames[0]]
        
        CHECK_PROJECTS={
            '钢筋':{
                '检查项目':['1、纵向钢筋的品种规格、数量、位置等', 
                           '2、钢筋的连接方式、接头位置、接头数量、接头面积百分率等', 
                           '3、箍筋、横向钢筋的品种、规格、数量间距等', 
                           '4、预埋件的规格、数量、位置等', 
                           '5、主筋锚固长度、节点构造等', 
                           '6、钢筋代换情况'
                           ],
                '检查内容':'钢筋的规格、数量、型号、尺寸、锚固长度等符合设计要求及规范规定',
                '标题':'钢  筋',
                '验收规范':'《混凝土结构工程施工质量验收规范》GB50204-2015',
            },
            '防水层':{
                '检查项目':['1、卷材防水层所用的材料', 
                           '2、卷材防水层做法', 
                           '3、卷材防水层质量', 
                           '4、卷材防水层的搭接宽度', 
                           '5、卷材防水层细部处理'
                           ],
                
                '检查内容':self.CheckItemWord1(),
                '标题':'防  水  层',
                '验收规范':'《屋面工程质量验收规范》GB50207-2012',
            },
            '保温层':{
                '检查项目':['1、保温层所用的材料', 
                           '2、保温层做法', 
                           '3、保温层质量', 
                           '4、保温层的搭接宽度', 
                           '5、保温层细部处理'
                           ], 
                '检查内容':self.CheckItemWord2(),
                '标题':'保  温  层',
                '验收规范':'《屋面工程质量验收规范》GB50207-2012',
            },
            '混凝土':{
                '检查项目':['1、原材料、配合比应符合规范要求',
                           '2、表面不得有空洞、漏筋', 
                           '3、表面应无孔洞、露筋、缺棱角、蜂窝、麻面',
                           '4、混凝土强度'
                           ],
                '检查内容':self.CheckItemWord3(),
                '标题':'混  凝  土',
                '验收规范':'《混凝土结构工程施工质量验收规范》GB50204-2015',
            },
            '砌体':{#这里的内容还须要修改
                '检查项目':['1、砌体强度等级',
                        '2、砂浆的强度等级',
                        '3、拉结筋的规格、数量、间距、埋入长度', 
                        '4、拉结筋的安装方式及位置', 
                           ],
                '检查内容':'1、拉结筋的规格、数量、间距、埋入长度符合设计要求。2、拉结筋的安装方式及位置符合设计要求。',
                '标题':'砌 体',
                '验收规范':'《砌体结构工程施工质量验收规范》GB50203-2011',
            },
            '避雷引下线':{
                '检查项目':['1、利用金属构件、金属管道做接地线时与接地干线的连接',
                        '2、钢制接地线的连接和材料规格、尺寸'],
                '检查内容':self.CheckItemWord4(),
                '标题':'避雷引下线',
                '验收规范':'《建筑电气工程施工质量验收规范》GB50205-2015',
            },
                 
            
            
        }
        if self.JudegeISNULL('隐蔽验收类型'):# 隐蔽验收类型(抬头写什么隐蔽类型)
            
            DIR_SHEET['H2'] = CHECK_PROJECTS[self.project_information['隐蔽验收类型']] \
                ['标题']
            
            DIR_SHEET['H2'].font = Font(size=17, bold=True,name='黑体')
            
            DIR_SHEET['H2'].alignment = Alignment(horizontal='center', vertical='center')
        
        
        if self.JudegeISNULL('隐蔽验收图片的名称'):
            
            path = os.path.join(urls.TEMPLATES['隐蔽验收']['钢筋隐蔽验收图片'],
                                self.project_information['隐蔽验收图片的名称'])  # 留下来作为后续的一个接口

            DIR_SHEET.merge_cells(
                start_row=8,
                start_column=14,
                end_column=23,
                end_row=10)

        else:
            DIR_SHEET.merge_cells(
                start_row=8,
                start_column=14,
                end_column=23,
                end_row=21)

        if self.JudegeISNULL('项目名称') and self.JudegeISNULL('单位工程'):
            DIR_SHEET['D4'] = f"{self.project_information['项目名称']}({self.project_information['单位工程']})"
        if self.JudegeISNULL('分部工程'): DIR_SHEET['N4'] = self.project_information['分部工程']
        if self.JudegeISNULL('项目负责人'):DIR_SHEET['R4'] = self.project_information['项目负责人']
        if self.JudegeISNULL('施工单位'):DIR_SHEET['D5'] = self.project_information['施工单位']
        if self.JudegeISNULL('检验批部位'):DIR_SHEET['N5'] = self.project_information['检验批部位']
        if self.JudegeISNULL('分项工程'): DIR_SHEET['N6'] = self.project_information['分项工程']
        if self.JudegeISNULL('表格时间'):DIR_SHEET['C21'] = self.project_information['表格时间']
        if self.JudegeISNULL('表格时间'):DIR_SHEET['S6'] = self.project_information['表格时间']
        if self.JudegeISNULL('检查记录'):DIR_SHEET['N8'] = self.project_information['检查记录']
        if self.JudegeISNULL('最终的检验批编号'):DIR_SHEET['H3'] = self.project_information['最终的检验批编号']
        if self.JudegeISNULL('施工图号'):DIR_SHEET['R5'] = self.project_information['施工图号']

        align = Alignment(horizontal='left', vertical='center')
        
        CheckItemNum=len(CHECK_PROJECTS[self.project_information['隐蔽验收类型']]['检查项目'])
        for n in range(CheckItemNum):
            
            CheckDirItem=CHECK_PROJECTS[self.project_information['隐蔽验收类型']]['检查项目'][n]
            
            print(len(CheckDirItem))
            
            if len(CheckDirItem)>22:
                
                DIR_SHEET.row_dimensions[8+n].height = 30
            
            DIR_SHEET.cell(row=8+n,column=2).value = CheckDirItem
            DIR_SHEET.cell(row=8+n,column=2).alignment = Alignment(horizontal='left', vertical='center',wrapText=True)
            
            # 判断检查项目中是否存在特殊情况
            
            if CheckDirItem=='6、钢筋代换情况':
                DIR_SHEET.cell(row=8+n,column=8).value = '/'
            else:
                DIR_SHEET.cell(row=8+n,column=8).value = '符合要求'
            
            DIR_SHEET.cell(row=8+n,column=2).alignment = align
            
            DIR_SHEET.cell(row=8+n,column=2).font = Font(size=10, bold=True)
            
        RemainderNum=8-CheckItemNum
        
        for n in range(RemainderNum):
            
            DIR_SHEET.merge_cells(start_row=8+CheckItemNum+n,start_column=2,end_column=13,end_row=8+CheckItemNum+n)
            DIR_SHEET.cell(row=8+CheckItemNum+n,column=2).value = '( 以 下 空 白 )'
            DIR_SHEET.cell(row=8+CheckItemNum+n,column=2).alignment = Alignment(horizontal='center', vertical='center')
 
            DIR_SHEET.cell(row=8+CheckItemNum+n,column=2).font = Font(size=10, bold=True)
        
    def CheckItemWord1(self):
        
        if self.JudegeISNULL('屋面结构类型') and self.JudegeISNULL('厂家') and self.JudegeISNULL('规格/型号') and self.JudegeISNULL('材料'):
            return f"1、屋面防水层采用{self.projectInformation['厂家']}生产的{self.projectInformation['规格/型号']}的{self.projectInformation['材料']},符合设计要求及国家现行标准的有关规定; \n2、卷材防水层在转角处、施工缝等部位做法符合设计及施工规范要求; \n3、卷材防水层无空鼓、起泡、褶皱等缺陷,卷材铺贴顺序以及卷材细部处理等均符合设计及规范要求。"
            
        else:
            return '1、屋面结构防水层材料规格、型号、厚度符合设计要求及国家现行标准的有关规定; \n2、卷材防水层在转角处、施工缝等部位做法符合设计及施工规范要求; \n3、卷材防水层无空鼓、起泡、褶皱等缺陷,卷材铺贴顺序以及卷材细部处理等均符合设计及规范要求。'
            
    def CheckItemWord2(self):
        
        if self.JudegeISNULL('屋面结构类型') and self.JudegeISNULL('厂家') and self.JudegeISNULL('规格/型号') and self.JudegeISNULL('材料'):
        
            return  f"屋面保温层采用{self.projectInformation['厂家']}生产的{self.projectInformation['规格/型号']}的{self.projectInformation['材料']},符合设计要求及国家现行标准的有关规定; \n2、保温基层平整、坚固、干燥,做法符合设计及施工规范要求; \n3、保温板厚度符合设计要求,粘贴牢固，无剥离现象。"
        
        else:
            return  "屋面保温层材料、规格、型号、厚度符合设计要求及国家现行标准的有关规定; \n2、保温基层平整、坚固、干燥,做法符合设计及施工规范要求; \n3、保温板厚度符合设计要求,粘贴牢固，无剥离现象."
            
        
    def CheckItemWord3(self):
        
        if self.JudegeISNULL('混凝土强度'):
        
            return '1、混凝土设计强度{};\n' \
                                '2、混凝土构件截面尺寸及轴线偏差符合设计及规范要求;\n' \
                                '3、混凝土成型尺寸符合设计要求,混凝土表面无蜂窝、麻面等现象。'.format(
                    self.project_information['混凝土强度'])
        else:
            return '1、混凝土强度符合符合设计要求;\n' \
                   '2、混凝土构件截面尺寸及轴线偏差符合设计及规范要求;\n' \
                   '3、混凝土成型尺寸符合设计要求,混凝土表面无蜂窝、麻面等现象。'
    
    def CheckItemWord4(self):
        
        return '' 
         
        
    # end def
                
                                    
        
if __name__=='__main__':
    
    project_information = {
        "项目名称": "项目名称",
        '单位工程': '单位工程',
        '施工单位': '施工单位',
        '项目负责人': '项目负责人',
        '检验批部位': '综合楼一层',
        '隐蔽验收类型': '钢筋',
        
    }
    new =  '6.xlsx'
    
    TonYICheck(project_information, new)